package com.aitao.enums;

/**
 * @Author : tao.ai
 * @Create : 2021/09/30 16:26
 * @Description : 正则校验枚举
 */
public enum Regex {
    //表示匹配连续的多个相同的任意字符，只要找到字符串里面存在连续的两个或者以上的相同字符即匹配。
    //\\1表示取第一个括号匹配的内容，后面的加号表示匹配1次或多次，加在一起就是某个字符重复两次或多次就匹配
    RG_REMOVE_DUPLICATE("([\\w\\u2E80-\\u9FFF])\\1+", "字符串去重"),
    RG_IMG_URL("<img[^>]+src=['\"]([^'\"]+)['\"]+", "匹配img标签中的src属性"),
    RG_VERSION_NUMBER("^(\\d)+(\\.\\d+)+$", "匹配版本号XX.XX.XX"),
    RG_LEFT_TRIM("^\\s+", "清除首部空白字符"),
    RG_RIGHT_TRIM("\\s+$", "清除尾部空白字符"),
    RG_LEFT_RIGHT_TRIM("(^\\s+)|(\\s+$)", "清除首尾空白字符"),
    RG_ALL_TRIM("\\s*", "清除首尾空白字符(包含内容中的留白)"),
    RG_LEFT_TRIM_VERIFY("^\\s+.*", "匹配首部空白字符"),
    RG_RIGHT_TRIM_VERIFY(".*\\s+$", "匹配尾部空白字符"),
    RG_EMAIL("^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$", "匹配邮箱"),
    RG_PHONE("^13[0-9]{9}|15[012356789][0-9]{8}|18[0-9]{9}|(14[57][0-9]{8})|(17[015678][0-9]{8})$", "匹配手机号"),
    RG_USERNAME("^[a-zA-Z\\u2E80-\\u9FFF]{2,15}$", "匹配账户名"),
    RG_PASSWORD("^[a-zA-z]\\w{6,16}$", "账户密码,以字母开头"),
    RG_PASSWORD_STRONG("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{6,16}$", "强密码，必须包含大小写字母和数字的组合，不能使用特殊字符，长度在6-16之间"),
    RG_CHINESE("^[\\u2E80-\\u9FFF]+$", "匹配汉字"),
    RG_VALID_CODE("^[a-zA-Z0-9]{5}$", "匹配验证码"),
    RG_NUMBER("^([+-]?)\\d{0,}\\.?\\d{1,}$", "匹配正负数，符号位(0个或1个) + 数字(1个或多个) + 小数点(0个或1个) + 数字(1个或多个)"),
    RG_POSITIVE_INTEGER("^[1-9]\\d{0,}$", "匹配正整数"),
    RG_NEGTIVE_INTEGER("^([-]?)[1-9]\\d{0,}$", "匹配负整数"),
    RG_FLOAT_NUMBER("^([+-]?)\\d{0,}\\.?\\d{1,}$", "匹配浮点数"),
    RG_LETTER("^[a-zA-Z]{1,}$", "匹配字母"),
    RG_UPPERCASE_LETTER("^[a-zA-Z]{1,}$", "匹配大写字母"),
    RG_LOWERCASE_LETTER("^[a-z]{1,}$", "匹配小写字母"),
    RG_POSTAL_CODE("^\\d{6}$", "匹配邮政编码"),
    RG_IPV4("^(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})(\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})){3}$", "匹配IPv4地址"),
    RG_IMG("(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$", "匹配图片地址 *.png"),
    RG_DATE("^\\d{4}-(((0[13578]|(10|12))-(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)-(0[1-9]|[1-2][0-9]|30)))$", "匹配日期(yyyy-MM-dd)|(yyyy/MM/dd)|(yyyy年MM月dd日)"),
    RG_RAR_FILE("(.*)\\.(rar|zip|7zip|tgz)$", "匹配压缩文件"),
    RG_QQ_NUMBER("^[1-9]\\d{4,14}$", "匹配QQ号码，最短5位，最长15位数字"),
    RG_URL("^(http|https|ftp)\\://([a-zA-Z0-9\\.\\-]+(\\:[a-zA-Z0-9\\.&amp;%\\$\\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\\-]+\\.)*[a-zA-Z0-9\\-]+\\.[a-zA-Z]{2,4})(\\:[0-9]+)?(/[^/][\\u2E80-\\u9FFFa-zA-Z0-9\\.\\,\\?\\'\\\\/\\+&amp;%\\$#\\=~_\\-@]*)*$", "匹配URL地址： 包括 http, ftp等"),
    RG_CAR_NUMBER("^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$", "匹配车牌号"),
    ;
    private final String value;
    private final String desc;

    public String getValue() {
        return value;
    }

    public String getDesc() {
        return desc;
    }

    Regex(String value, String desc) {
        this.value = value;
        this.desc = desc;
    }
}